package alumno;

import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import excepciones.AlumnoYaInscriptoException;

import sistemaDeLaCarrera.Carrera;
import sistemaDeLaCarrera.Materia;
import tutorias.AyudaEconomica;



public class Alumno{
	private final int DNI;	
	private final String nombre;
	private final String apellido;
	private int telefono;
	private int celular;
	private String email;
	private String direccion;
	private String estadoCivil;
	private String sexo;
	private List<Carrera> carreras = new Vector<Carrera>();
	private List<AlumnoEnCarrera> alumnosEnCarrera = new Vector<AlumnoEnCarrera>();
	private boolean becario;
	private AyudaEconomica ayudaEconomica;
	
	public Alumno(int DNI, String name, String surname) {
		this.DNI = DNI;
		this.nombre = name;
		this.apellido = surname;	
		this.becario = false;
	}	
	
	public Alumno(int DNI,String name,String surname,int phone,int cellular,
			String email,String address,String maritalStatus,String sex){
		this.DNI = DNI;
		this.nombre = name;
		this.apellido = surname;
		this.telefono = phone;
		this.celular = cellular;
		this.email = email;
		this.direccion = address;
		this.estadoCivil = maritalStatus;
		this.sexo = sex;
		this.becario = false;
	}			

	

	//GETTER AND SETTERS
	public boolean isBecario() {
		return becario;
	}

	public void setBecario(boolean becario) {
		this.becario = becario;
	}
	
	public AyudaEconomica getAyudaEconomica() {
		return ayudaEconomica;
	}
	
	public void setAyudaEconomica(AyudaEconomica ayudaEconomica) {
		this.ayudaEconomica = ayudaEconomica;
	}
	
	public List<Carrera> getCarreras() {
		return carreras;
	}
	
	public int getDNI() {
		return DNI;
	}
	
	
	public String getNombre() {
		return nombre;
	}
	
	
	public String getApellido() {
		return apellido;
	}		
	
	public List<AlumnoEnCarrera> getAlumnosEnCarrera() {
		return alumnosEnCarrera;
	}
	
	public String getEmail() {
		return email;
	}
	
	//COMPORTAMIENTO

	/**
	 * Agrega un alumnoEnCarrera a la lista de alumnosEnCarrera del alumno y agrega
	 * una carrera a la lista de carreras
	 * @param alumnoEnCarrera
	 * @throws AlumnoYaInscriptoException
	 */
	public void agregarAlumnoEnCarrera(AlumnoEnCarrera alumnoEnCarrera) throws AlumnoYaInscriptoException{
		if(carreras.contains(alumnoEnCarrera.getCarrera()))
			throw new AlumnoYaInscriptoException();
		else{
			alumnosEnCarrera.add(alumnoEnCarrera);
			carreras.add(alumnoEnCarrera.getCarrera());
		}
	}
	
	/**	  
	 * @return un map con todas las materias aprobadas por el alumno con sus 
	 * respectivas notas en todas las carreras que esta inscripto
	 */
	public Map<Materia,Integer> todasLasMateriasAprobadas(){
		Map<Materia,Integer> todasLasMaterias = new Hashtable<Materia, Integer>();
		for(AlumnoEnCarrera a : alumnosEnCarrera)
			todasLasMaterias.putAll(a.getMateriasAprobadas());		
		return todasLasMaterias;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Alumno){
			Alumno alumno = (Alumno) obj;
			return this.DNI == alumno.getDNI();
		}			
		else
			return false;		
	}	
	
	
}


	